//
//  SleepStagingUtils.m
//  CareRingApp
//
//  Created by Linktop on 2022/7/8.
//  睡眠算法-移植自安卓

#import "SleepStagingUtils.h"
//#import "StagingListData.h"
#import "SleepStageHeader.h"



// 字典key
NSString * const SLEEP_KEY_TIME = @"time";
NSString * const SLEEP_KEY_HR = @"hr";
NSString * const SLEEP_KEY_IDX = @"idx";

NSString * const SLEEP_KEY_HOUR_START_IDX = @"SLEEP_KEY_HOUR_START";            // 小时开始索引
NSString * const SLEEP_KEY_HOUR_END_IDX = @"SLEEP_KEY_HOUR_END";                // 小时结束索引
NSString * const SLEEP_KEY_HOUR_AVG_VALUE = @"SLEEP_KEY_HOUR_AVG_VALUE";    // 小时内平均值

NSString * const SLEEP_KEY_HOUR_NUMBER = @"SLEEP_KEY_HOUR_NUMBER";    // 第几个小时


NSString * const KEY_FIRST = @"first";
NSString * const KEY_SECOND = @"second";
NSString * const KEY_THIRD = @"third";


const int SPLIT_TIME_MINUTES = 1 * 60; // 60 分钟
/**
 * 连续几小时低心率 才算有睡眠
 */
const int MIN_HOURS_OF_SLEEP = 3;

/**
 * 根据静息心率判断睡眠心率的阈值 静息心率+多少以内是睡眠心率
 */
const int RESTING_SLEEP_HEART_RATE_THRESHOLD = 3;

/**
 * 觉醒和睡眠心率差值
 */
const int WAKE_SLEEP_HR_DEVIATION = 10;

/**
 * 查找N3睡眠数据 每多少分钟数据进行计算标准差
 */
const int N3_FIND_INTERVAL_TIME = 10;

/**
 * 标准差阈值多少以下认为是平缓心率 N3期
 */
const double N3_STANDARD_DEVIATION_THRESHOLD = 0.5;

/**
 * 是否需要矫正平缓心率数据 低-高-低 将这种数据认为是平缓心率 e.g 0.47-0.8-0.4
 */
const BOOL N3_NEED_CORRECTION_THRESHOLD = false;

/**
 * 标准差阈值平缓心率矫正范围从@N3_STANDARD_DEVIATION_THRESHOLD到
 *
 */
const int N3_STANDARD_DEVIATION_CORRECTION_THRESHOLD = 1;

/**
 * 小于等于多少个标准差平缓心率 是N3期
 * 连续几个小于等于N3_STANDARD_DEVIATION_THRESHOLD的数列才是N3期
 */
const int N3_STANDARD_DEVIATION_AMOUNT = 2;

/**
 * 深度睡眠最小间隔时间 单位分钟
 */
const int N3_DEEP_SLEEP_MINIMUM_INTERVAL = 20;

/**
 * 计算标准差数列采用连续还是间隔
 * false 连续0-3，4-7，8-11
 * true 间隔0-3，1-4，2-5
 */
const BOOL STANDARD_DEVIATION_CALCULATE_USE_INTERVAL = true;

/**
 * 睡眠分期 最小数量的数据才能进行计算标准差
 */
const int MIN_STANDARD_DEVIATION_AMOUNT = 3;
/**
 * 心率数据两两之间时间间隔最大允许多少分钟
 */
const int MAX_HEART_RATE_INTERVAL = 20;

/**
 * 睡眠分期 每多少分钟数据进行计算标准差
 */
const int STAGING_STANDARD_DEVIATION_INTERVAL_TIME = 5;

/**
 * N2 最大标准差阈值
 *
 */
const double N2_STANDARD_DEVIATION_THRESHOLD = 1.5;

/**
 * N1 最大标准差阈值
 *
 */
const double N1_STANDARD_DEVIATION_THRESHOLD = 2.5;

/**
  * REM 最大标准差阈值
  *
  */
const double REM_STANDARD_DEVIATION_THRESHOLD = 3.5;
/**
  * 分期连续性
  */
const BOOL STAGING_CONTINUITY = true;

@implementation SleepStagingUtils


@end
